In the context of software systems, updates that improve performance also tend to introduce new errors. A user that has recently upgraded to an “improved” version of a software program may soon regret the decision to upgrade if the user repeatedly experiences errors produced by the new code. The situation becomes even more frustrating when the error occurs when the user is using a feature that had worked flawlessly prior to the upgrade.
A storage server is an example of a program whose performance can be significantly improved by increasing the complexity of the tasks it performs. For example, conventional storage servers simply read and write data blocks to persistent storage in response to I/O requests that expressly identify the data blocks. However, the performance of storage servers that are used to satisfy I/O requests from database servers may be significantly improved, for example, using the techniques described in:
U.S. patent application Ser. No. 12/562,984, filed Sep. 18, 2009, entitled “Hash Join Using Collaborative Parallel Filtering In Intelligent Storage With Offloaded Bloom Filters”, the entire contents of which is incorporated herein by this reference;
U.S. patent application Ser. No. 12/563,073, filed Sep. 18, 2009, entitled “Storage-Side Storage Request Management”, the entire contents of which is incorporated herein by this reference; and
U.S. patent application Ser. No. 12/691,146, filed Jan. 21, 2010, entitled “Selectively Reading Data From Cache And Primary Storage”, the entire contents of which is incorporated herein by this reference.
The techniques described in the above-listed applications are examples of how the performance of a particular type of program (in this case, a storage server) may be improved by increasing the complexity of the program. Unfortunately, increasing the complexity of any program increases the likelihood of faults, and any program that experiences the same recurring faults under the same recurring circumstances will tend to frustrate the program's users.